package com.tjn;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 陶镓妮
 * @version 1.0
 */
public class GenericExtends {
    public static void main(String[] args) {

        //ArrayList<Object> strings = new ArrayList<String>();//没有继承性，不能这样写

        List<Object> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<AA> list3 = new ArrayList<>();
        List<BB> list4 = new ArrayList<>();
        List<CC> list5 = new ArrayList<>();

        //如果是List<?> c，可以接受任意的泛型类型
        m1(list1);
        m1(list2);
        m1(list3);
        m1(list4);
        m1(list5);//全部通过，没有错误

        //如果是List<? extends AA> c，只能接受AA或者AA的子类
        //m2(list1);
        //m2(list2);//这两个不是AA的子类
        m2(list3);
        m2(list4);
        m2(list5);

        //如果是List<? super AA> c，只能接受AA或者AA的父类
        m3(list1);
        //m3(list2);
        m3(list3);
        //m3(list4);
        //m3(list5);//这几个不是AA的父类

        }

    public static void m1(List<?> c){//任何泛型类型都可以接受
        for (Object o : c) {
            System.out.println(o);
        }
    }
    public static void m2(List<? extends AA> c){//只能接受AA或者AA的子类,规定了上限
        for (Object o : c) {
            System.out.println(o);
        }
    }
    public static void m3(List<? super AA> c){//只能接受AA或者AA的父类，规定了下限
        for (Object o : c) {
            System.out.println(o);
        }
    }
}

class AA{}
class BB extends AA{}
class CC extends BB{}